package com.jqq.set_;

import java.util.Comparator;
import java.util.TreeSet;

/**
 * @author 姬倩倩
 * @version 1.0
 */
@SuppressWarnings({"all"})
public class TreeSet_ {
    public static void main(String[] args) {
        //当使用无参构造器创建TreeSet时，仍然是无序的
        //希望添加的元素按一定规则排序
        //可以通过TreeSet提供的带参构造器，传入比较器(匿名内部类)
        //并指定排序规则
//        TreeSet treeSet = new TreeSet();
        TreeSet treeSet = new TreeSet(new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                //按字符串的大小的排序
//                return ((String) o1).compareTo((String)o2);
                //按字符串的长度大小排序
                return ((String)o1).length() -((String)o2).length();
            }
        });
        treeSet.add("jack");
        treeSet.add("tom");
        treeSet.add("a");
        treeSet.add("abc");//添加不进去 长度和tom相等

        System.out.println("treeSet=" + treeSet);
        /*
        1.构造器把传入的比较器对象，
           赋给了TreeSet底层的  TreeMap的属性this.comparator
           public TreeMap(Comparator<? super K> comparator) {
                this.comparator = comparator;
            }
         2.在调用treeSet.add("tom"); 在底层会执行
         Comparator<? super K> cpr = comparator;//cpr就是自定义的匿名内部类
         if (cpr != null) {
            do {
                parent = t;
                cmp = cpr.compare(key, t.key);
                if (cmp < 0)
                    t = t.left;
                else if (cmp > 0)
                    t = t.right;
                else//如果相等，即返回0，就加入不进去
                    return t.setValue(value);
            } while (t != null);
         }
         */
    }
}

